package com.ys.io.p5拷贝文件IO综合案列;

import java.io.*;

/**
 * 描述: 拷贝单层次文件夹和子文件
 *
 * @author CodeYang
 * @version 2020/12/31 16:25
 */
public class 拷贝单层次文件夹和子文件 {


    public static void main(String[] args) throws IOException {
        // 创建文件夹访问对象
        File srcFolder = new File("C:/Users/CodeYang/Desktop/编辑器+集成开发环境");

        // 获取文件夹的名称 用于拷贝到目的路径下 的文件名称
        String destFolderName = srcFolder.getName();

        // 创建目标路径对象,  --> 工程文件/day_23/ 原文件名
        File destFolder = new File("day_24", destFolderName);

        // 判断目的路径是否存在,(目的文件夹是否存在) 不存在就创建它
        if (!destFolder.exists()) {
            // 创建文件夹|目录
            destFolder.mkdir();
        }
        // 获取原路径下(原文件夹下)的所有的文件
        File[] listFiles = srcFolder.listFiles();
        try {
            for (File indexFile : listFiles) {
                System.out.println("全路径:" + indexFile.getCanonicalPath() + "\t当前文件名:---" + indexFile.getName());
                // 将遍历出来的每个feile对象拷贝到目标文件夹下(目录路径下)
                //  文件父路径(拼接了)+ 子文件名称
                File newFile = new File(destFolder, indexFile.getName());
                //拷贝文件
                copyFile(indexFile, newFile);

            }
            System.out.println("拷贝成功");
        } catch (Exception e) {
            System.out.println("拷贝失败!!!");
            e.printStackTrace();
        }

    }

    /**
     * 拷贝文件
     *
     * @param srcFile  原文件对象
     * @param destFile 目标文件对象
     */
    private static void copyFile(File srcFile, File destFile) throws Exception {
        try (
                // 使用缓冲字节流 更快的读与写
                BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(srcFile));
                BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(destFile));
        ) {
            byte[] data = new byte[1024];
            int len = 0;
            while ((len = inputStream.read(data)) != -1) {
                outputStream.write(data, 0, len);
            }
        }
    }
}
